Dart eval:Library 实体类
介绍
在 Dart 中,一个源文件可以简单认为就是一个 Library(也是 Dart 术语)。在 dart_eval 中,借助 dart analyzer 的力量,该转化过程为:
- Dart 源代码
- CompilationUnit(Dart Analyzer 将源码转为 AST)
- 《Dart eval:DeclarationOrBridge 实体类》
- 《Dart eval:Library 实体类》
到第四步就是比较纯粹的 dart eval 中的概念了。本文分析 Library 的实现,具体实现如下:
class Library {
Library(this.uri, {required this.imports, required this.exports, required this.declarations, this.library});
/// A `package`, `dart`, or `file` URI
final Uri uri;
/// 是否有 library 声明
final String? library;
/// 依赖和导出
final List<ImportDirective> imports;
final List<ExportDirective> exports;
/// 声明
final List<DeclarationOrBridge> declarations;
@override
bool operator ==(Object other) =>
identical(this, other)
|| other is Library
&& runtimeType == other.runtimeType
&& uri == other.uri;
@override
int get hashCode => uri.hashCode;
/// 复制新 Library 实例,可选:传入一组声明(DeclarationOrBridge)
Library copyWith({List<DeclarationOrBridge>? declarations}) {
return Library(uri,
library: library, imports: imports, exports: exports, declarations: declarations ?? this.declarations);
}
}